﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using Entidades;
using System.Collections;

namespace CapaDatos.Adapters
{
  public  class PlanificacionProyectoDidacticoAdapter
    {

         BDRinconLuzEntities contexto;

        public PlanificacionProyectoDidacticoAdapter()
        {
            contexto = RinconLuzContext.Context;
        }

        public PlanificacionProyectoDidacticoAdapter(string edicion)
        {
            contexto = RinconLuzContext.ContextNew;
        }

        public void Agregar(PlanificacionProyectoDidactico entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && entidad.ChangeTracker.State == ObjectState.Added)
            {
                contexto.RegistrarCambios(entidad);
                contexto.RealizarCambios();
            }
        }

        public void Eliminar(PlanificacionProyectoDidactico entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            IObjectSet<PlanificacionProyectoDidactico> objectSet = contexto.CrearSet<PlanificacionProyectoDidactico>();

            objectSet.Attach(entidad);
            objectSet.DeleteObject(entidad);
        }



        public void Modificar(PlanificacionProyectoDidactico entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && (entidad.ChangeTracker.State & ObjectState.Deleted) != ObjectState.Deleted)
            {
                entidad.MarkAsModified();
            }

            contexto.SaveChanges();
        }


        public IEnumerable<PlanificacionProyectoDidactico> Obtener()
        {
            return contexto.CrearSet<PlanificacionProyectoDidactico>();
        }

        public PlanificacionProyectoDidactico ObtenerEntidad(Guid idPlanificacion)
        {

            var Entidad = (from v in contexto.PlanificacionProyectoDidactico
                           where v.IdPlanificacionProyectoDidactico == idPlanificacion &&
                                    v.Eliminada != true
                           select v).First();
            return Entidad;

        }

        public bool ExistePlanificacion(Guid id, string mes, int año)
        {
            var Existe = (from v in contexto.PlanificacionProyectoDidactico
                           where v.MesPlanificacion == mes &&
                           v.AñoPlanificacion == año &&
                           v.IdPlanificacionProyectoDidactico != id &&
                                    v.Eliminada != true
                           select v).Any();
            return Existe;
            
        }


        public bool ExisteEntidad(Guid id)
        {

            var Existe = (from v in contexto.PlanificacionProyectoDidactico
                          where v.IdPlanificacionProyectoDidactico == id
                          select v).Any();

            return Existe;
        }


        public List<ViewEntity> ObtenerPlanificacionesPorAño(int año)
        {
            List<ViewEntity> ListaFinal = new List<ViewEntity>();

            var ListaPlanificaciones = (from v in contexto.PlanificacionProyectoDidactico.Include("ProyectoDidactico")
                                     where v.AñoPlanificacion == año &&
                                      v.Eliminada != true
                                     select v).ToList();


            foreach (var item in ListaPlanificaciones)
            {
                ListaFinal.Add(new ViewEntity(item.IdPlanificacionProyectoDidactico, item.MesPlanificacion + " " + item.AñoPlanificacion +  " - " + item.ProyectoDidactico.NombreProyectoDidactico ));

            }

            return ListaFinal;
        }




        public PlanificacionProyectoDidactico ObtenerEntidadParaEditar(Guid id)
        {

            var Entidad = (from v in contexto.PlanificacionProyectoDidactico.Include("ProyectoDidactico")
                           where v.IdPlanificacionProyectoDidactico == id && 
                           v.Eliminada != true
                           select v).First();

            var Actividades = (from c in contexto.PlanificacionDiariaProyectoDidactico
                               where c.IdPlanificacionProyectoDidactico == id &&
                               c.Eliminada != true
                               select c).ToList();


            if (Actividades.Count > 0)
            {

                foreach (var item in Actividades)
                {
                    Entidad.PlanificacionesDiariasProyectoDidactico.Add(item);

                }

            }

            return Entidad;
        }



        public PlanificacionProyectoDidactico ObtenerEntidadParaInforme(Guid id)
        {

            var Entidad = (from v in contexto.PlanificacionProyectoDidactico.Include("ProyectoDidactico")
                           where v.IdPlanificacionProyectoDidactico == id &&
                           v.Eliminada != true
                           select v).First();

            var Actividades = (from c in contexto.PlanificacionDiariaProyectoDidactico.Include("ActividadDidactica")
                               where c.IdPlanificacionProyectoDidactico == id &&
                               c.Eliminada != true
                               select c).ToList();


            if (Actividades.Count > 0)
            {

                foreach (var item in Actividades)
                {
                    Entidad.PlanificacionesDiariasProyectoDidactico.Add(item);

                }

            }

            return Entidad;
        }




        public bool EstaAsignadoPlanificacion(Guid idProyecto)
        {
            var Existe = (from v in contexto.PlanificacionProyectoDidactico
                          where v.ProyectoDidactico.IdProyectoDidactico == idProyecto &&
                                   v.Eliminada != true
                          select v).Any();
            return Existe;

        }








    }
}
